/*****************************************************************************
*                     Organizacion de Datos - 75.06                          *
*                         Catedra Lic. Servetto                              *
*            Facultad de Ingenieria - Universidad de Buenos Aires            *
******************************************************************************/ 

#include "../Comun/Archivo.h"

#include "ArchivoRF.h"
#include "ConexionCapaFisica.h"

#include <iostream>
#include <istream>
#include <string>

using namespace std;
using namespace Comun;

namespace CapaIndices
{

	ArchivoRF::ArchivoRF(string clase)
	{
		this->clase = clase;

		if (!ConexionCapaFisica::ExisteClase(clase))
		{
			cerr << "CapaIndices->ArchivoRF.cpp->ArchivoRF::ArchivoRF(string clase)" << endl << "No existe un repositorio para la clase especificada." << endl;
			throw new exception();
		}
	};

	ArchivoRF::ArchivoRF(MetadatosArchivo &metadatosDelArchivo)
	{
		this->clase = metadatosDelArchivo.Nombre;

		ConexionCapaFisica::CrearArchivoRF(metadatosDelArchivo);
	};

	ArchivoRF::~ArchivoRF()
	{
	};

	int ArchivoRF::CrearGrupo(Grupo &grupo)
	{
		grupo.GrupoId =  ConexionCapaFisica::CrearGrupo(this->clase, grupo);
		return grupo.GrupoId;
	};

	CodigoResultado ArchivoRF::GuardarGrupo(Grupo &grupo, bool omitirSubflujo)
	{
		return ConexionCapaFisica::GuardarGrupo(this->clase, grupo, omitirSubflujo);
	};
	
	Grupo& ArchivoRF::LeerGrupo(int grupoId)
	{
		return ConexionCapaFisica::LeerGrupo(this->clase, grupoId);
	};
	
	void ArchivoRF::BorrarGrupo(int grupoId)
	{
		ConexionCapaFisica::BorrarGrupo(this->clase, grupoId);
	};
	
	int ArchivoRF::PrimerGrupo()
	{
		return ConexionCapaFisica::PrimerGrupo(this->clase);
	};
	
	int ArchivoRF::SiguienteGrupo(int grupoIdActual)
	{
		return ConexionCapaFisica::SiguienteGrupo(this->clase, grupoIdActual);
	};

}
